package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.service.GoodsService;
import com.atguigu.jxc.service.GoodsTypeService;
import com.atguigu.jxc.vo.GoodsTypeVo;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {

    @Autowired
    private GoodsTypeDao goodsTypeDao;

    @Override
    public String loadGoodsType() {
        // 先查节点,如果节点为根节点再根据根节点的id查子节点
        // 查到有子->创建一个list 查子
            // 又查到有子->查子
                // 又有子->查子
        List<GoodsType> goodsTypes = goodsTypeDao.loadGoodsType(-1);
        List<GoodsTypeVo> goodsTypeVos = myStream(goodsTypes);
//        new GoodsTypeVo()
        Gson gson = new Gson();
        String s = gson.toJson(goodsTypeVos);
        return s;
    }

    private List<GoodsTypeVo> myStream(List<GoodsType> goodsTypes) {
        List<GoodsTypeVo> goodsTypeVos = goodsTypes.stream().map(goodsType -> {
                    GoodsTypeVo goodsTypeVo = new GoodsTypeVo();
                    goodsTypeVo.setId(goodsType.getGoodsTypeId());
                    goodsTypeVo.setText(goodsType.getGoodsTypeName());
                    HashMap<String, Integer> objectObjectHashMap = new HashMap<>();
                    if (goodsType.getGoodsTypeState() == 1) {
                        objectObjectHashMap.put("status", 1);
                        goodsTypeVo.setState("close");
                        List<GoodsType> sub = goodsTypeDao.loadGoodsType(goodsTypeVo.getId());
                        goodsTypeVo.setChildren(myStream(sub));
                    } else {
                        objectObjectHashMap.put("status", 0);
                        goodsTypeVo.setState("open");
//                        List<GoodsTypeVo> goodsChildren = searchChildrenByPid(goodsType.getGoodsTypeId());
                    }
                    goodsTypeVo.setIconCls("goods-type");
                    goodsTypeVo.setAttributes(objectObjectHashMap);
                    return goodsTypeVo;
                }
        ).collect(Collectors.toList());
        return goodsTypeVos;
    }

//    private List<GoodsTypeVo> searchChildrenByPid(Integer pid) {
//        goodsTypeDao.
//    }

    @Override
    public void save(String goodsTypeName, Integer pId) {
        GoodsType parent = goodsTypeDao.getByPid(pId);
        if (parent.getGoodsTypeState() == 0) {
            parent.setGoodsTypeState(1);
            goodsTypeDao.update(parent);
        }
        goodsTypeDao.save(goodsTypeName, pId);
    }

    @Override
    public void delete(Integer goodsTypeId) {
        goodsTypeDao.delete(goodsTypeId);
    }
}
//if getbyPid(pid).state == 0
//    update getbyPid(pid)==1
//else if getbyPid(pid).state == 1

//查根->查到是根->根据根查子->查到是根->根据根查子->查到是根->根据根查子